//给定一个只包含整数的有序数组 nums ，每个元素都会出现两次，唯有一个数只会出现一次，请找出这个唯一的数字。 
//
// 
//
// 示例 1： 
//
// 
//输入: nums = [1,1,2,3,3,4,4,8,8]
//输出: 2
// 
//
// 示例 2： 
//
// 
//输入: nums =  [3,3,7,7,10,11,11]
//输出: 10
// 
//
// 
//
// 
//
// 
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 10⁵ 
// 0 <= nums[i] <= 10⁵ 
// 
//
// 
//
// 进阶：采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗？ 
//
// 
//
// 
// 注意：本题与主站 540 题相同：https://leetcode-cn.com/problems/single-element-in-a-sorted-
//array/ 
//
// Related Topics 数组 二分查找 👍 82 👎 0


package LeetCode.editor.cn;

import java.util.Arrays;

/**
 * @author ldltd
 * @date 2025-03-01 22:44:25
 * @description LCR 070.有序数组中的单一元素
 */
public class SkFtm2{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 SkFtm2 fun=new SkFtm2();
	 	 Solution solution = fun.new Solution();
		 System.out.println(5^5);
	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
		 //位运算 On
    public int singleNonDuplicate3(int[] nums) {
		return Arrays.stream(nums).reduce((a, b) -> a ^ b).getAsInt();
	}
	public int singleNonDuplicate(int[] nums) {
		int l=0 ,r=nums.length-1;
		while (l<r){
			int m=l+((r-l)>>1);
			if(isTarget(nums,m)) return nums[m];
			if(m>0&&nums[m-1]!=nums[m]){
				if(m%2==0){
					l=m+1;
				}else {
					r=m;
				}
			}else {
				if(m%2==0){
					r=m-2;
				}else {
					l=m+1;
				}
			}
		}
		return nums[l];
	}
	public  boolean isTarget(int [] nums,int i){
		return i<nums.length-1&&nums[i+1]!=nums[i]&&i>0&&nums[i-1]!=nums[i];
	}


	public int singleNonDuplicate1(int[] nums) {
		int left = -1;
		int right = nums.length / 2;
		while (left + 1 < right) {
			int mid = (left + right) >>> 1;
			if (nums[mid * 2] != nums[mid * 2 + 1]) {
				right = mid;
			} else {
				left = mid;
			}
		}
		return nums[right * 2];
	}
}
//leetcode submit region end(Prohibit modification and deletion)

}
